/**
 * N个人围成一圈排列，任意给定一个X，作为初始。
 * 每次可以要求两种操作：
 * + k: 逆时针走k步，返回当前人
 * - k: 顺时针走k步，返回当前人
 * 问能否在2023次操作以内求出N
 * N范围在1E6
 * 
 * 分块，首先`+ 1`1000次，于是得到了头1000个人。
 * 如果N小于1000，则已经得到了答案
 * 否则，再用1000作为步长，每次"+ 1000"，然后判断是否回到了头1000个人
 * 因为最多有1E6的人，所以在1000步以内一定能够回来
 * 一共需要2000次操作
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;

int X;
map<int, int> SS;

void proc(){
    SS[X] = 0;
    for(int i=1;i<1000;++i){
        cout << "+ 1" << endl; cout.flush();
        cin >> X;
        auto it = SS.find(X);
        if(it != SS.end()){
            return (cout << "! " << SS.size() << endl), (void)cout.flush();
        }
        SS.insert(it, {X, SS.size()});
    }

    int k = 999;
    while(1){
        cout << "+ 1000" << endl; cout.flush();
        cin >> X;
        auto it = SS.find(X);
        if(it != SS.end()){
            auto tmp = it->second;
            return (cout << "! " << k + 1000 - it->second << endl), (void)cout.flush();
        }
        k += 1000;
    }
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--){
        cin >> X;
        proc();
    }
    return 0;
}